home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Libraries / Generic List Library / generic_list.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-26  |  4.0 KB  |  109 lines  |  [TEXT/R*ch]

  1.    /************************************************************************
  2.    *************************************************************************
  3.    **                                                                     **
  4.    **                        Generic List Library                         **
  5.    **                                                                     **
  6.    **                          by Keith Pomakis                           **
  7.    **                     kppomaki@jeeves.uwaterloo.ca                    **
  8.    **                                                                     **
  9.    **                            Spring, 1994                             **
  10.    **                                                                     **
  11.    *************************************************************************
  12.    ************************************************************************/
  13.  
  14. #ifndef GENERIC_LIST_DEFINED
  15. #define GENERIC_LIST_DEFINED
  16.  
  17. typedef struct GLE_struct {
  18.     void *pointer;
  19.     struct GLE_struct *previous;
  20.     struct GLE_struct *next;
  21. } Generic_list_element;
  22.  
  23. typedef struct {
  24.     Generic_list_element *current;
  25.     Generic_list_element pre_element, post_element, deleted_element;
  26.     int (*lt)(void *a, void *b);
  27.     unsigned int num_of_elements;
  28. } Generic_list_info;
  29.  
  30. typedef struct {
  31.     Generic_list_info *info;
  32. } Generic_list;
  33.  
  34. #define Generic_stack Generic_list
  35. #define Generic_queue Generic_list
  36.  
  37. void initialize_list(Generic_list *list);
  38. void initialize_sorted_list(Generic_list *list, int (*lt)(void *a, void *b));
  39. void destroy_list(Generic_list *list);
  40. void add_to_beginning(Generic_list list, void *pointer);
  41. void add_to_end(Generic_list list, void *pointer);
  42. void add_to_list(Generic_list list, void *pointer);
  43. void *remove_from_beginning(Generic_list list);
  44. void *remove_from_end(Generic_list list);
  45. void *remove_from_list(Generic_list list, void *pointer);
  46. void remove_all(Generic_list list);
  47. void *peek_at_beginning(Generic_list list);
  48. void *peek_at_end(Generic_list list);
  49.  
  50. void *first_in_list(Generic_list list);
  51. void *next_in_list(Generic_list list);
  52. void *current_in_list(Generic_list list);
  53. void *remove_current(Generic_list list);
  54. void *previous_in_list(Generic_list list);
  55. void *last_in_list(Generic_list list);
  56. void reset_to_beginning(Generic_list list);
  57. void reset_to_end(Generic_list list);
  58.  
  59. int num_of_objects(const Generic_list list);
  60. int is_empty(const Generic_list list);
  61. int is_in_list(const Generic_list list, const void *pointer);
  62. Generic_list copy_list(Generic_list list);
  63.  
  64. void perform_on_list
  65.      (Generic_list list, void (*fn)(void *pointer, void *args), void *args);
  66. void *first_that
  67.      (Generic_list list, int (*fn)(const void *pointer, const void *args),
  68.                          const void *args);
  69. void *next_that
  70.      (Generic_list list, int (*fn)(const void *pointer, const void *args),
  71.                          const void *args);
  72. void *previous_that
  73.      (Generic_list list, int (*fn)(const void *pointer, const void *args),
  74.                          const void *args);
  75. void *last_that
  76.      (Generic_list list, int (*fn)(const void *pointer, const void *args),
  77.                          const void *args);
  78. Generic_list all_such_that
  79.      (Generic_list list, int (*fn)(const void *pointer, const void *args),
  80.                          const void *args);
  81. void remove_all_such_that
  82.      (Generic_list list, int (*fn)(const void *pointer, const void *args),
  83.                          const void *args);
  84.  
  85.  
  86. /****************************************************************************/
  87.  
  88. /* Stack operations */
  89.  
  90. #define initialize_stack initialize_list
  91. #define destroy_stack destroy_list
  92. #define push add_to_beginning
  93. #define pop remove_from_beginning
  94. #define peek_at_top peek_at_beginning
  95. #define copy_stack copy_list
  96.  
  97. /* Queue operations */
  98.  
  99. #define initialize_queue initialize_list
  100. #define destroy_queue destroy_list
  101. #define enqueue add_to_end
  102. #define dequeue remove_from_beginning
  103. #define dequeue_all remove_all
  104. #define peek_at_head peek_at_beginning
  105. #define peek_at_tail peek_at_end
  106. #define copy_queue copy_list
  107.  
  108. #endif /* GENERIC_LIST_DEFINED */
  109.